#pragma once
#include "../CGIContext.h"

namespace Alice
{
    class CGIVulkan;
    class CGIVulkanDevice;
    class CGIVulkanQueue;
    class CGIVulkanCommandBufferManager;
    class CGIVulkanCommandListContext : public ICGICommandContext
    {
    public:
        CGIVulkan* mRHI;
        CGIVulkanCommandListContext* mImmediate;
        CGIVulkanDevice* mDevice;
        CGIVulkanQueue* mQueue;
        CGIVulkanCommandBufferManager* mCommandBufferManager;
        CGIVulkanCommandListContext(CGIVulkan* InRHI, CGIVulkanDevice* InDevice, CGIVulkanQueue* InQueue, CGIVulkanCommandListContext* InImmediate);
        inline CGIVulkanCommandBufferManager* GetCommandBufferManager()
        {
            return mCommandBufferManager;
        }
        inline CGIVulkanQueue* GetQueue()
        {
            return mQueue;
        }
        void RHIBeginDrawingViewport(CGIViewport* inViewport, CGITexture* inCGITexture);
        virtual void RHIBeginRenderPass(const CGIRenderPassInfo* InInfo, const TCHAR* InName);
    };
    class CGIVulkanCommandListContextImmediate : public CGIVulkanCommandListContext
    {
    public:
        CGIVulkanCommandListContextImmediate(CGIVulkan* InRHI, CGIVulkanDevice* InDevice, CGIVulkanQueue* InQueue);
    };
}
